package com.example.mybatisplusdemo.web.controller;

import com.example.mybatisplusdemo.common.JsonResponse;
import com.example.mybatisplusdemo.service.PriceTrendService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

/**
 * <p>
 * 价格趋势分析控制器
 * </p>
 *
 * @author 
 * @since 2025/01/10
 */
@RestController
@RequestMapping("/api/price-trend")
@RequiredArgsConstructor
public class PriceTrendController {

    private final PriceTrendService priceTrendService;

    /**
     * 获取价格趋势数据
     * 
     * 业务逻辑说明：
     * 1. 校验出发地和目的地参数
     * 2. 查询指定航线的历史价格数据
     * 3. 按日期分组统计最低价格
     * 4. 生成未来30天的价格趋势预测
     * 5. 返回包含日期标签和价格数据的结果
     * 
     * @param origin 出发地机场代码，不能为空
     * @param destination 目的地机场代码，不能为空
     * @return Map<String, Object> 包含labels和data的价格趋势数据
     */
    @GetMapping("/data")
    public JsonResponse<Object> getPriceTrendData(
            @RequestParam String origin,
            @RequestParam String destination) {
        try {
            // 参数校验
            if (origin == null || origin.trim().isEmpty()) {
                return JsonResponse.failure("出发地不能为空");
            }
            if (destination == null || destination.trim().isEmpty()) {
                return JsonResponse.failure("目的地不能为空");
            }
            
            Map<String, Object> trendData = priceTrendService.getPriceTrendData(origin, destination);
            return JsonResponse.success(trendData, "价格趋势数据获取成功");
        } catch (Exception e) {
            return JsonResponse.failure("获取价格趋势数据失败: " + e.getMessage())
                    .setCode(500)
                    .setException(e);
        }
    }

    /**
     * 获取价格统计信息
     * 
     * 业务逻辑说明：
     * 1. 查询指定航线的价格统计数据
     * 2. 计算最高价、最低价、平均价格
     * 3. 分析价格波动趋势
     * 4. 提供出行建议
     * 
     * @param origin 出发地机场代码，不能为空
     * @param destination 目的地机场代码，不能为空
     * @return Map<String, Object> 价格统计和建议信息
     */
    @GetMapping("/statistics")
    public JsonResponse<Object> getPriceStatistics(
            @RequestParam String origin,
            @RequestParam String destination) {
        try {
            Map<String, Object> statistics = priceTrendService.getPriceStatistics(origin, destination);
            return JsonResponse.success(statistics, "价格统计信息获取成功");
        } catch (Exception e) {
            return JsonResponse.failure("获取价格统计信息失败: " + e.getMessage())
                    .setCode(500)
                    .setException(e);
        }
    }
}